const fs = require('fs');
const path = require('path');

// 定义路径
const appAssetsDir = path.join(__dirname, 'CMB250716/Assets.xcassets');
const uploadsDir = path.join(__dirname, 'uploads/menu-images');
const backendUploadsDir = path.join(__dirname, 'backend/uploads/menu-images');

// 确保上传目录存在
if (!fs.existsSync(uploadsDir)) {
  console.log(`创建上传目录: ${uploadsDir}`);
  fs.mkdirSync(uploadsDir, { recursive: true });
}

// 确保后端上传目录存在
if (!fs.existsSync(backendUploadsDir)) {
  console.log(`创建后端上传目录: ${backendUploadsDir}`);
  fs.mkdirSync(backendUploadsDir, { recursive: true });
}

// 获取所有图片集目录
const imagesetDirs = fs.readdirSync(appAssetsDir)
  .filter(dir => fs.statSync(path.join(appAssetsDir, dir)).isDirectory() && dir.endsWith('.imageset'));

console.log(`找到 ${imagesetDirs.length} 个图片集`);

// 处理每个图片集
let copiedCount = 0;
let skippedCount = 0;
let errorCount = 0;

imagesetDirs.forEach(imagesetDir => {
  try {
    // 获取图片集中的所有文件
    const imagesetPath = path.join(appAssetsDir, imagesetDir);
    const files = fs.readdirSync(imagesetPath);
    
    // 查找@1x.png图片（最低分辨率，适合网页显示）
    const lowResImage = files.find(file => file.endsWith('@1x.png'));
    
    // 如果没有找到@1x.png，尝试找@2x.png
    const mediumResImage = files.find(file => file.endsWith('@2x.png'));
    
    // 如果没有找到@2x.png，尝试找@3x.png
    const highResImage = files.find(file => file.endsWith('@3x.png'));
    
    // 选择最适合的分辨率的图片（优先使用@1x，因为文件小，适合网页显示）
    const sourceImage = lowResImage || mediumResImage || highResImage;
    
    if (sourceImage) {
      // 提取基本文件名（不包括.imageset和@nx.png）
      const baseName = imagesetDir.replace('.imageset', '');
      
      // 创建目标文件名（去掉@1x、@2x或@3x后缀）
      const targetFileName = `${baseName}.png`;
      const targetPath = path.join(uploadsDir, targetFileName);
      const backendTargetPath = path.join(backendUploadsDir, targetFileName);
      
      // 源文件路径
      const sourcePath = path.join(imagesetPath, sourceImage);
      
      // 复制到主上传目录
      if (!fs.existsSync(targetPath)) {
        fs.copyFileSync(sourcePath, targetPath);
        console.log(`复制 ${sourceImage} 到 ${targetPath}`);
        copiedCount++;
      } else {
        console.log(`跳过 ${targetFileName} - 文件已存在于主上传目录`);
        skippedCount++;
      }
      
      // 复制到后端上传目录
      if (!fs.existsSync(backendTargetPath)) {
        fs.copyFileSync(sourcePath, backendTargetPath);
        console.log(`复制 ${sourceImage} 到 ${backendTargetPath}`);
        copiedCount++;
      } else {
        console.log(`跳过 ${targetFileName} - 文件已存在于后端上传目录`);
        skippedCount++;
      }
      
      // 同时创建带有@1x.png后缀的文件（因为前端可能直接使用这种格式的文件名）
      const targetFileNameWithSuffix = `${baseName}@1x.png`;
      const targetPathWithSuffix = path.join(uploadsDir, targetFileNameWithSuffix);
      const backendTargetPathWithSuffix = path.join(backendUploadsDir, targetFileNameWithSuffix);
      
      // 复制到主上传目录（带后缀版本）
      if (!fs.existsSync(targetPathWithSuffix)) {
        fs.copyFileSync(sourcePath, targetPathWithSuffix);
        console.log(`复制 ${sourceImage} 到 ${targetPathWithSuffix}`);
        copiedCount++;
      } else {
        console.log(`跳过 ${targetFileNameWithSuffix} - 文件已存在于主上传目录`);
        skippedCount++;
      }
      
      // 复制到后端上传目录（带后缀版本）
      if (!fs.existsSync(backendTargetPathWithSuffix)) {
        fs.copyFileSync(sourcePath, backendTargetPathWithSuffix);
        console.log(`复制 ${sourceImage} 到 ${backendTargetPathWithSuffix}`);
        copiedCount++;
      } else {
        console.log(`跳过 ${targetFileNameWithSuffix} - 文件已存在于后端上传目录`);
        skippedCount++;
      }
    } else {
      console.log(`跳过 ${imagesetDir} - 未找到PNG图片`);
      skippedCount++;
    }
  } catch (err) {
    console.error(`处理 ${imagesetDir} 时出错:`, err);
    errorCount++;
  }
});

console.log('\n复制完成!');
console.log(`- 复制: ${copiedCount} 个文件`);
console.log(`- 跳过: ${skippedCount} 个文件`);
console.log(`- 错误: ${errorCount} 个文件`);